Realisierung eines Bahnvorverarbeitungsbausteins
Sehen Sie hierzu das Beispielprojekt CNC14_PathPreprocessing.project im Installationsverzeichnis von CODESYS unter ..\CODESYS SoftMotion\Examples.
Das Beispielprojekt zeigt, wie ein neuer Bahnvorverarbeitungsbaustein umgesetzt werden kann.
Die Bahnvorverarbeitung dient allgemein dazu, die vom G-Code eingelesene Bahn zu verändern. Dadurch können Funktionen wie Werkzeugradiuskorrektur oder Eckverschleifung umgesetzt werden. Es ist aber auch möglich, spezifische Funktionen für eine bestimmte Maschine oder Anwendung als Bahnvorverarbeitungsbaustein einzubinden.
Für weitere Informationen zur Bahnvorverarbeitung siehe: Bahnvorverarbeitung und Queue-Größen.
Für ein Beispiel, wie Sie einen Bahnvorverarbeitungsbaustein verwenden siehe CNC-Beispiel 03: Bahnvorverarbeitung online durchführen.
Begrenzung der Tangentenänderung
Im Beispiel wird eine 2D-Schneideapplikation betrachtet. Mit einem Messer soll entlang einer durch G-Code vorgegebenen Bahn geschnitten werden. Die Transformation SMC_TRAFO_GantryCutter2 wird verwendet, um den Winkel des Messers basierend auf der aktuellen Tangente der Bahn zu ermitteln.
Die Herausforderung ist, dass sich das Messer nicht zu schnell drehen darf, da sonst der Schnitt nicht sauber ausgeführt wird. Die Begrenzung der Drehgeschwindigkeit des Messers ist im Beispielprojekt über den neu angelegten Bahnvorverarbeitungsbaustein LimitTangentVelocity gelöst. Er verändert die Vorschubgeschwindigkeit auf der Bahn so, dass die Änderungsgeschwindigkeit der Tangente einen konfigurierbaren Maximalwert nicht überschreitet.
Als G-Code wird ein einfaches Rechteck vorgegeben, bei dem die Ecken verschliffen werden.
![]() |
Im Trace ist das Ergebnis der Ausführung zu sehen: In orange wird die Geschwindigkeit der C-Achse dargestellt, die der Drehgeschwindigkeit des Messers entspricht. Sie wird wie vorgegeben auf 45°/s begrenzt.
![]() |
Aufbau der Applikation
Der Aufbau ist für CNC-Applikationen typisch. In der Hintergrundtask wird der G-Code eingelesen, hier findet auch die Bahnvorverarbeitung statt. In der Bustask wird die Interpolation ausgeführt.
Der Funktionsbaustein LimitTangentVelocity zeigt die notwendigen Schritte und Zustände für einen Bahnvorverarbeitungsbaustein.
Das Grundprinzip ist, dass der Funktionsbaustein Bahnelemente (vom Typ SMC_GEOINFO) aus der Eingangs-Queue (poqDataIn) einliest, bearbeitet und dann in die Ausgangs-Queue (poqDataOut) schreibt. Die Elemente werden aus der Eingangs-Queue entfernt.
Die Logik zur Veränderung der Vorschubgeschwindigkeit findet sich von Zeile 102 - 138. Die Hilfsfunktion ComputeMaxCurvature berechnet die maximale Krümmung, die auf einem gegebenen Bahnelement auftreten kann.
// Our velocity limitation comes here. This modifies an element from the // input queue and copies the modified element to the output queue. // Finally, the element is removed from the input queue m_geo := pgeo^; // Copy the element // Note: the feature flags set in the G-Code with G38/G39 can be queried // by reading pgo^.dwFeatureFlags, like this: IF (SHR(m_geo.dwFeatureFlags, featureFlag) AND 1) = 1 THEN // feature is turned on ok := ComputeMaxCurvature(m_geo, kappa=> kappa_max); IF NOT ok THEN // Curvature cannot be computed m_state := STATE_ERROR; ErrorID := SMC_INVALID_PARAMETER; OnExit(); RETURN; END_IF // Compute maximum allowed path velocity based on maximum curvature // and maximum allowed angular velocity IF kappa_max = 0 THEN // No curvature, no limitation necessary vel := m_geo.dVel; ELSE vel := m_maxAngularVelocity_rad / kappa_max; END_IF IF velMin < 0 OR vel < velMin THEN velMin := vel; END_IF // Set new maximum velocity for the element m_geo.dVel := MIN(m_geo.dVel, vel); ELSE // feature is turned off END_IF
Inbetriebnahme
Übersetzen Sie die Applikation und laden Sie sie auf eine Steuerung.
Starten Sie die Applikation.
Öffnen Sie den Trace und laden ihn auf die Steuerung.
Schreiben Sie den Wert
TRUEin die VariablenPath.bExecuteundPLC_PRG.bStart.Sie können die Abarbeitung des G-Codes im Trace nachvollziehen.

